<?php

require_once 'classes/Pays.php';
require_once 'SCinterface.php';
require_once 'classes/Message.php';

/*
 * Classe de service CRUD pour manipuler les enregistrements de pays
 * @author Zikrija
 * @date 04.05.2012
 */
class SCpays {
    
    private $db;

    /**
     *Contructeur créant l'objet pour la connexion à la DB 
     */
    public function __construct() {
        $this->db = new PDO(ACA_DB_DSN, ACA_DB_USER, ACA_DB_PASS, array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\''));
        $this->db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    }

    /**
    * Ajoute un pays
    * @param Pays Pays à ajouter
    */
    public function ajouter($unPaysAAjouter) {
        try{

            $query =  $this->db->prepare("INSERT INTO pays (nom) VALUES(:nom)");

            $query->execute(array(
                'nom'             => $unPaysAAjouter->getNom()
            ));

            $query->closeCursor();
        }
        catch(PDOException $e){
            return new Message("Pays non ajouté: ".$e->getMessage());
        }
        return $unPaysAAjouter;
   }
    /**
     * Methode permettant de modifier un pays
     * @param Pays Le pays avec les nouvelles valeurs
     * @param Pays Le pays avec les anciennes valeurs
     * @return boolean 
     */
    public function modifier($unNouveauPays, $unAncienPays){
        try{

            $query =  $this->db->prepare("UPDATE pays SET ".
                "nom = :nouveauNom ".
                "WHERE nom = :ancienNom");

            $query->execute(array(
                'nouveauNom'           => $unNouveauPays->getNom(),
                'ancienNom'            => $unAncienPays->getNom(),
            ));

            $query->closeCursor();



        }
        catch(PDOException $e){
            return new Message("Pays non modifié: ".$e->getMessage());
        }
        return $unNouveauPays;
    }
    /**
     * Methode permettant de supprimer un pays
     * @param Pays Pays à supprimer
     * @return boolean 
     */
    public function supprimer($unPaysASupprimer){
        try{
            $query = $this->db->prepare("DELETE FROM pays WHERE nom = :nom");
            $query->execute(array(
                'nom'           => $unPaysASupprimer->getNom(),
            ));            
            $query->closeCursor();
            
            $message = new Message("Pays supprimé"); 
        }
        catch(PDOException $e){
            $message = new Message("Pays non supprimé: ". $e->getMessage());
        }
        return $message;
    }
   
    /**
     *
     * @param Pays  de recherche sous forme d'objet Pays
     * @return un tableau d'objet Pays
     */
    public function lister($paysALister){
        try{
            $sql="SELECT * FROM pays ";
            $sql_Where="WHERE";
            if($paysALister!=NULL)
            {
                if($paysALister->getNom()!=NULL)
                    $sql_Where.=" nom = '".$paysALister->getNom()."' AND ";
            }         

            $sql_Where = substr($sql_Where,0,-5);
            $sql.=$sql_Where." ORDER BY nom;";
            $lesPaysTrouves=NULL;
            $unPaysLu=NULL;
            $result=$this->db->query($sql);
            while($row = $result->fetch(PDO::FETCH_ASSOC))
            {   
                $unPaysLu = new Pays($row['nom']);

                $lesPaysTrouves[]=$unPaysLu;
            }                
        }
        catch(PDOException $e)
        {
            print($e->getMessage());
            $lesPaysTrouves=NULL;
        }
        return $lesPaysTrouves;
    } 
}

?>
